From: Giovanni Campagna Date: Fri, 20 Jul 2012 13:59:53 +0000 (+0200) Subject: Keyboard: fix timestamp handling to account for CURRENT_TIME X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~5873 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=bf2d2071fc6062d25a6dadea830df5a5e2cbbb27;p=gnome-shell.git Keyboard: fix timestamp handling to account for CURRENT_TIME CLUTTER_CURRENT_TIME (like GDK_CURRENT_TIME and libX11 CurrentTime) is 0, and thus compares lower than all valid timestamps, meaning that focus changes without an X11 event in the stack are ignored by the on screen keyboard. https://bugzilla.gnome.org/show_bug.cgi?id=664309 --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index 57e4db427..6a4d50833 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -201,7 +201,7 @@ const Keyboard = new Lang.Class({ this.actor = null; - this._timestamp = global.get_current_time(); + this._timestamp = global.display.get_current_time_roundtrip(); Main.layoutManager.connect('monitors-changed', Lang.bind(this, this._redraw)); this._keyboardSettings = new Gio.Settings({ schema: KEYBOARD_SCHEMA }); @@ -494,15 +494,30 @@ const Keyboard = new Lang.Class({ this._moveTemporarily(); }, + // _compareTimestamp: + // + // Compare two timestamps taking into account + // CURRENT_TIME (0) + _compareTimestamp: function(one, two) { + if (one == two) + return 0; + if (one == Clutter.CURRENT_TIME) + return 1; + if (two == Clutter.CURRENT_TIME) + return -1; + return one - two; + }, + // D-Bus methods Show: function(timestamp) { if (!this._enableKeyboard) return; - if (timestamp - this._timestamp < 0) + if (this._compareTimestamp(timestamp, this._timestamp) < 0) return; - this._timestamp = timestamp; + if (timestamp != Clutter.CURRENT_TIME) + this._timestamp = timestamp; this.show(); }, @@ -510,10 +525,11 @@ const Keyboard = new Lang.Class({ if (!this._enableKeyboard) return; - if (timestamp - this._timestamp < 0) + if (this._compareTimestamp(timestamp, this._timestamp) < 0) return; - this._timestamp = timestamp; + if (timestamp != Clutter.CURRENT_TIME) + this._timestamp = timestamp; this.hide(); },